// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"
#include "../SQLReplaceable.h"

class SQLWhileStatement :virtual public SQLStatementImpl, virtual public SQLReplaceable
{
public:
  // while expr
  SQLExpr_ptr condition;
  SQLStatement_list_ptr statements;
  // while label name
  string_ptr labelName;

  SQLWhileStatement();
  SHAREDOBJECT(SQLWhileStatement);
  string_ptr getLabelName();

  void setLabelName(string_ptr labelName);

  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  SQLObject_list_ptr getChildren();

  SQLStatement_list_ptr getStatements();

  void setStatements(SQLStatement_list_ptr statements);

  SQLExpr_ptr getCondition();

  void setCondition(SQLExpr_ptr x);

  SQLObject_ptr clone();

  // @Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

  virtual string_ptr getClass() { return make_string_ptr("SQLWhileStatement"); }
};
